<script>
	export default {
		globalData: {
			data: {
				request_url: 'https://t1.chowtaiking.com.cn/prod-api/api/',
				request_admin_url: 'https://t1.chowtaiking.com.cn/prod-api/',
				admin_token: '', //管理员登录token
				token: '', //用户token
				appid: "wx33554b9327c9d388",
				tenantName: "周大金珠宝",
				spreadUid: '', // 推广id
				numberId: "", //用户id
				// 默认用户头像
				default_user_head_src: "https://t1.chowtaiking.com.cn/img/ruoyi/2025/03/10/c8e199c36dda451a879d9fc77efa05a9.png",
				// uuid缓存key
				cache_user_uuid_key: "cache_user_uuid_key",
				// 用户信息缓存key
				cache_user_info_key: "cache_shop_user_info_key",
				// 静态资源地址（如系统根目录不在public目录下面请在静态地址后面加public目录、如：https://d1.shopxo.vip/public/）
				static_url: 'https://t1.chowtaiking.com.cn/img/ruoyi/',
				application_title: '周大金珠宝',
				// tabbar页面
				tabbar_pages: [
					"/pages/index/index",
					"/pages/jewelry/jewelry",
					"/pages/diamond/diamond",
					"/pages/marketing_campaign/marketing_campaign",
					"/pages/user/user"
				],
				isManager: '', // 是否加盟商
				isRecommend: '', // 是否业务经理，
			},
			get_static_url(type, is_plugins) {
				// 默认公共地址
				if ((type || null) == null) {
					type = 'common';
				}

				// 是否插件
				if ((is_plugins || false) == true) {
					// 根据配置的静态url地址+插件标识符
					return this.data.static_url + 'static/plugins/images/' + type + '/';
				} else {
					if (type == 'images') {
						return this.data.static_url + 'static/images/common'
					}
					// 根据配置的静态url地址+主题标识+参数类型组合远程静态文件地址
					return this.data.static_url + 'static/app/' + this.data.default_theme + '/' + type + '/';
				}
			},
			/**
			 * 字段数据校验
			 * data           待校验的数据, 一维json对象
			 * validation     待校验的字段, 格式 [{fields: 'mobile', msg: '请填写手机号码', is_can_zero: 1(是否可以为0)}, ...]
			 */
			fields_check(data, validation) {
				for (var i in validation) {
					var temp_value = data[validation[i]["fields"]];
					var temp_is_can_zero = validation[i]["is_can_zero"] || null;
					if (temp_value == undefined || temp_value.length == 0 || temp_value == -1 || temp_is_can_zero ==
						null && temp_value == 0) {
						uni.showToast({
							title: validation[i]['msg']
						})
						// this.showToast();
						return false;
					}
				}
				return true;
			},
			/**
			 * 登录校验
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 */
			is_login_check(res, object, method) {
				if (res.code == -400) {
					uni.clearStorage();
					// this.get_user_info(object, method);
					return false;
				}
				return true;
			},
			// 窗口宽度处理
			window_width_handle(width) {
				// #ifdef H5 || APP
				if (width > 800) {
					width = 800;
				}
				// #endif
				return width;
			},
			/**
			 * 获取设备信息
			 * key      指定key
			 * dv       默认数据（不存在则读取、默认null）
			 * is_real  是否实时读取
			 */
			get_system_info(key, dv, is_real) {
				var info = null;
				if ((is_real || false) == true) {
					info = this.set_system_info() || null;
				} else {
					info = uni.getStorageSync(this.data.cache_system_info_key) || null;
				}
				if (info == null || (key || null) == null) {
					return info;
				}
				return (info[key] == undefined) ? (dv == undefined ? null : dv) : info[key];
			},
			/**
			 * 设置设备信息
			 */
			set_system_info() {
				var system_info = uni.getSystemInfoSync();
				uni.setStorageSync(this.data.cache_system_info_key, system_info);
				return system_info;
			},
			// 窗口宽度处理
			window_width_handle(width) {
				// #ifdef H5 || APP
				if (width > 800) {
					width = 800;
				}
				// #endif
				return width;
			},

			// 窗口高度处理
			window_height_handle(system) {
				var height = system.windowHeight;
				// 状态栏
				if (system.statusBarHeight > 0) {
					height += system.statusBarHeight;
				}
				// 导航栏
				if (system.windowTop > 0) {
					height += system.windowTop;
				}
				// 底部菜单
				if (system.windowBottom > 0) {
					height += system.windowBottom;
				}
				return height;
			},
			// 检查版本更新
			updateApp() {
				const updateManager = uni.getUpdateManager();
				updateManager.onCheckForUpdate(function(res) {
					// 请求完新版本信息的回调
					console.log(res.hasUpdate);
				});
				updateManager.onUpdateReady(function(res) {
					uni.showModal({
						title: '更新提示',
						content: '新版本已经准备好，是否重启应用？',
						success(res) {
							if (res.confirm) {
								// 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
								updateManager.applyUpdate();
							}
						}
					});
				});
				updateManager.onUpdateFailed(function(res) {
					// 新的版本下载失败
				});
			},

			// 终端类型值
			application_client_type() {
				var value = '';
				// #ifdef MP-WEIXIN
				value = 'weixin';
				// #endif
				// #ifdef MP-ALIPAY
				value = 'alipay';
				// #endif
				// #ifdef MP-BAIDU
				value = 'baidu';
				// #endif
				// #ifdef MP-QQ
				value = 'qq';
				// #endif
				// #ifdef MP-TOUTIAO
				value = 'toutiao';
				// #endif
				// #ifdef MP-KUAISHOU
				value = 'kuaishou';
				// #endif
				// #ifdef H5
				value = 'h5';
				// #endif
				return value;
			},
			// 链接地址事件
			url_event(e) {
				var value = e.currentTarget.dataset.value || null;
				var is_redirect = parseInt(e.currentTarget.dataset.redirect || 0) == 1;
				this.url_open(value, is_redirect);
			},
			// url打开
			url_open(value, is_redirect = false) {
				if ((value || null) != null) {
					// web地址
					var http_arr = ['http:/', 'https:'];
					if (http_arr.indexOf(value.substr(0, 6)) != -1) {
						this.open_web_view(value);

						// 打开外部小程序协议
					} else if (value.substr(0, 8) == 'appid://') {
						uni.navigateToMiniProgram({
							appId: value.substr(8)
						});

						// 地图协议
					} else if (value.substr(0, 6) == 'map://') {
						var values = value.substr(6).split('|');
						if (values.length != 4) {
							this.showToast('事件值格式有误');
							return false;
						}
						this.open_location(values[2], values[3], values[0], values[1]);

						// 电话协议
					} else if (value.substr(0, 6) == 'tel://') {
						this.call_tel(value.substr(6));

						// 默认切换或跳转页面
					} else {
						if (this.is_tabbar_pages(value)) {
							var temp = value.split('?');
							if (temp.length > 1 && (temp[1] || null) != null) {
								value = temp[0];
								var query = this.url_params_to_json(temp[1]);
								uni.setStorageSync(this.data.cache_page_tabbar_switch_params, query);
							}
							uni.switchTab({
								url: value
							});
						} else {
							if (is_redirect) {
								uni.redirectTo({
									url: value
								});
							} else {
								uni.switchTab({
									url: value
								});
							}
						}
					}
				}
			},
			/**
			 * 事件操作
			 */
			operation_event(e) {
				if (e.currentTarget.dataset.type == 'undefined') {
					// console.log("undefined");
				}

				var type = parseInt(e.currentTarget.dataset.type || 1);
				var value = e.currentTarget.dataset.value || null;
				if (value != null) {
					switch (type) {
						// web
						case 0:
							this.open_web_view(value);
							break;
							// 内部页面
						case 1:
							if (this.is_tabbar_pages(value)) {
								var temp = value.split('?');
								if (temp.length > 1 && (temp[1] || null) != null) {
									value = temp[0];
									var query = this.url_params_to_json(temp[1]);
									uni.setStorageSync(this.data.cache_page_tabbar_switch_params, query);
								}
								uni.switchTab({
									url: value
								});
							} else {
								uni.navigateTo({
									url: value
								});
							}
							break;
							// 跳转到外部小程序
						case 2:
							uni.navigateToMiniProgram({
								appId: value
							});
							break;
							// 跳转到地图查看位置
						case 3:
							var values = value.split('|');
							if (values.length != 4) {
								this.showToast('事件值格式有误');
								return false;
							}
							this.open_location(values[2], values[3], values[0], values[1]);
							break;
							// 拨打电话
						case 4:
							this.call_tel(value);
							break;
					}
				}
			},
			/**
			 * 当前地址是否存在tabbar中
			 */
			is_tabbar_pages(url) {
				var value = this.get_url_main_part(url);
				if ((value || null) == null) {
					return false;
				}
				var temp_tabbar_pages = this.data.tabbar_pages;
				for (var i in temp_tabbar_pages) {
					if (temp_tabbar_pages[i] == value) {
						return true;
					}
				}
				return false;
			},
			// url主要部分
			get_url_main_part(url) {
				if (url.indexOf("?") == -1) {
					var value = url;
				} else {
					var temp_str = url.split("?");
					var value = temp_str[0];
				}
				return value;
			},
			/**
			 * 请求参数处理
			 * url     url地址
			 */
			request_params_handle(url) {
				// 用户信息
				var user = this.get_user_cache_info();
				var token = user == null ? '' : (user.token || '');
				var uuid = this.request_uuid();
				var client_value = this.application_client_type();
				// 拼接标识
				var join = (url.indexOf('?') == -1) ? '?' : '&';
				return url + join + "&system_type=" + this.data.system_type + "&application=app&application_client_type=" +
					client_value + "&token=" + token + "&uuid=" + uuid;
			},
			// 获取当前uuid
			request_uuid() {
				var uuid = uni.getStorageSync(this.data.cache_user_uuid_key) || null;
				if (uuid == null) {
					uuid = this.uuid();
					uni.setStorage({
						key: this.data.cache_user_uuid_key,
						data: uuid,
						fail: () => {
							this.showToast('uuid缓存失败');
						}
					});
				}
				return uuid;
			},
			// uuid生成
			uuid() {
				var d = new Date().getTime();
				return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
					var r = (d + Math.random() * 16) % 16 | 0;
					d = Math.floor(d / 16);
					return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);
				});
			},
			/**
			 * 默认弱提示方法
			 * msg    [string]  提示信息
			 * status [string]  状态 默认error [正确success, 错误error]
			 */
			showToast(msg, status) {
				if ((status || 'error') == 'success') {
					uni.showToast({
						icon: 'success',
						title: msg,
						duration: 3000
					});
				} else {
					uni.showToast({
						icon: 'none',
						title: msg,
						duration: 3000
					});
				}
			},

			/**
			 * 获取配置信息、可指定key和默认值
			 * key              数据key（支持多级读取、以 . 分割key名称）
			 * default_value    默认值
			 */
			get_config(key, default_value) {
				var value = null;
				var config = uni.getStorageSync(this.data.cache_config_info_key) || null;
				if (config != null) {
					// 数据读取
					var arr = key.split('.');
					if (arr.length == 1) {
						value = config[key] == undefined ? null : config[key];
					} else {
						value = config;
						for (var i in arr) {
							if (value[arr[i]] != undefined) {
								value = value[arr[i]];
							} else {
								value = null;
								break;
							}
						}
					}
				}
				// 默认值
				if (value == null && default_value != undefined) {
					value = default_value;
				}
				// 无数据则处理自定义字段定义的数据
				if (value == null) {
					switch (key) {
						// 货币符号
						case 'currency_symbol': {
							value = this.data.currency_symbol;
							break;
						}
						case 'store_id': {
							value = this.data.store_id;
							break;
						}
					}
				}
				return value;
			},

			/**
			 * 配置是否有效(100毫秒检验一次、最多检验100次)
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 */
			is_config(object, method) {
				var self = this;
				var count = 0;
				var timer = setInterval(function() {
					if (self.get_config('status') == 1) {
						clearInterval(timer);

						if (typeof object === 'object' && (method || null) != null) {
							object[method](true);
						}
					}
					count++;

					if (count >= 100) {
						clearInterval(timer);
					}
				}, 100);
			},
			// json对象转url请求参数
			json_to_url_params(data) {
				var str = '';
				for (var i in data) {
					if (str != '') {
						str += '&';
					}
					str += i + '=' + data[i];
				}
				return str;
			},
			/**
			 * 从缓存获取用户信息、可指定key和默认值
			 * key              数据key
			 * default_value    默认值
			 */
			get_user_cache_info(key, default_value) {
				// 获取当前时间戳
				var cacheEndTime = Date.now();

				var user = uni.getStorageSync(this.data.cache_user_info_key) || null;
				if (user == null) {
					// 是否存在默认值
					return default_value == undefined ? null : default_value;
				}

				// 是否读取key
				if ((key || null) != null) {
					return user[key] == undefined ? default_value == undefined ? null : default_value : user[key];
				}

				// 获取结束缓存时间
				user.cacheEndTime = cacheEndTime
				// console.log(user.cacheEndTime,"结束缓存时间");
				return user;
			},
			/**
			 * 获取登陆授权数据
			 */
			get_login_cache_info() {
				return uni.getStorageSync(this.data.cache_user_info_key) || null;
			},
			get_request_url(a) {
				var url = this.data.request_url + a;
				return this.request_params_handle(url);
			},
			/**
			 * 请求参数处理
			 * url     url地址
			 */
			request_params_handle(url) {
				// 用户信息
				var user = this.get_user_cache_info();
				var token = user.token;
				// 拼接标识
				var join = (url.indexOf('?') == -1) ? '?' : '&';
				return url + join + "&token=" + token;
			},
			/**
			 * 获取用户信息,信息不存在则唤醒授权
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 * return     有用户数据直接返回, 则回调调用者
			 */
			get_user_info(object, method, scene) {
				// 检测登录
				this.checkLogin().then(data => {
						if (data) {
							// #ifdef MP
							// 小程序唤醒用户授权
							this.wxLogin(object, method, scene);
							// #endif
							return false;
						}
					})
					.catch(error => {
						console.error(error); 
				});
				var user = this.get_user_cache_info();
				if (user == null) {
					// #ifdef MP
					// 小程序唤醒用户授权
					this.wxLogin(object, method, scene);
					// #endif
					return false;
				}	
				if (this.data.numberId == '') {
					this.data.numberId = user.numberId
				}
				return user;
			},
			/**
			 * 是否需要登录
			 * 是否需要绑定手机号码
			 */
			user_is_need_login(user) {
				// 用户信息是否正确
				if ((user || null) == null) {
					return true;
				}
				// 是否需要绑定手机号码
				if ((user.is_mandatory_bind_mobile || 0) == 1) {
					if ((user.phone || null) == null) {
						return true;
					}
				}
				return false;
			},
			// 微信登录
			wxLogin(object, method, scene) {
				uni.showLoading({
					title: "授权中..."
				});

				if (!this.data.tabbar_pages[0]) {
					uni.clearStorageSync();
				}

				scene = scene || "";
				// if (scene == "") {
				// 	scene = this.data.numberId || "";
				// }
				let url = this.data.request_url + 'appminiuserauth?token=' + this.data.token + "&scene=" + scene;
				var self = this;
				uni.login({
					provider: "weixin",
					success: (loginRes) => {
						uni.getUserInfo({
							provider: 'weixin',
							success: (infoRes) => {
								let avatarUrl = infoRes.userInfo.avatarUrl;
								let nickName = infoRes.userInfo.nickName;
								let encryptedData = infoRes.encryptedData;
								let iv = infoRes.iv;
								uni.setStorageSync("avatarUrl", avatarUrl);
								uni.setStorageSync("nickName", nickName);
								uni.request({
									url: url,
									method: "POST",
									data: {
										authcode: loginRes.code
									},
									success: (res) => {
										uni.hideLoading();
										var data = res.data.data;
										// 模拟手机登录
										// data.is_mandatory_bind_mobile = 1;
										// data.phone = null;

										this.data.token = data.token;
										uni.setStorageSync(self.data
											.cache_user_info_key, data);

										let u = self.get_login_cache_info();
										if (typeof object === 'object' && (method ||
												null) != null) {
											object[method]();
										}
									},
									fail: (err) => {
										uni.hideLoading();
										uni.showToast({
											title: "服务器请求出错"
										})
									}
								})
							}
						})
					}
				})
			},
			// 检测登录
			checkLogin() {
				return new Promise((resolve, reject) => {
					uni.request({
						url: this.data.request_url + 'checkLogin?token=' + this.data.token,
						method: 'GET',
						success: (res) => {
							console.log(res, '检测登录');
							var code = res.data.code;
							if (code == -400) {
								resolve(true);
							} else {
								resolve(false)
							}
						},
						fail: (err) => {
							reject(false)
						}
					})
				})
			},
			// 静态文件url地址
			get_static_urls() {
				// 根据配置的静态url地址+主题标识+参数类型组合远程静态文件地址
				return this.data.static_url;
			},
			// 清除用户缓存
			remove_user_cache_event() {
				// 用户信息缓存
				uni.removeStorageSync(this.data.cache_user_info_key);

				// var url = this.data.tabbar_pages[0];
				// setTimeout(function() {
				//     uni.switchTab({url: url});
				// }, 1500);
			},
			// 返回上一页、则回到shouy
			page_back_prev_event() {
				var prev_page = this.prev_page();
				if (prev_page == null) {
					uni.switchTab({
						url: this.data.tabbar_pages[0]
					});
				} else {
					uni.navigateBack();
				}
			},
			// app标题
			get_application_title() {
				var value = null;
				// 根据终端类型获取对应数据
				var type = this.application_client_type() || null;
				if (type !== null) {
					value = this.get_config('config.common_app_mini_' + type + '_title') || null;
				}
				// 获取公共数据
				if (value === null) {
					value = this.get_config('config.home_site_name', this.data.application_title);
				}
				return value;
			},
		},
		onLaunch: function() {
			console.log('App Launch')
		},
		onShow: function() {
			this.token = uni.getStorageSync("token");
			//检查是否有更新
			this.globalData.updateApp();
			// 设置设备信息
			this.globalData.set_system_info();
		},
		onHide: function() {
			console.log('App Hide')
		}
	}
</script>

<style>
	/*每个页面公共css */
</style>